package tests;

import java.text.DecimalFormat;

import logica.*;
import modelo.*;

public class TestingEuler {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Modelo m = new Modelo();
		
		try {
			String ecuacion = "-x+t";
			float x0 = 18;
			float t0 = 0;
			float tn = 10;
			int n = 20000;
			int metodo;
			String solucionExacta = "2*E^(-t)+t-1";
			
			Resultado result;
			DecimalFormat dec;
			
			metodo = IModelo.EULER;
			result = m.calcular(ecuacion, x0, t0, tn, n, metodo, solucionExacta);
			
			System.out.println("EULER");
			System.out.println("tk\txk\txk_ex\terrk");
			dec = new DecimalFormat("###.##");
			for (float t = t0; t <= tn; t += (tn-t0)/n) {
				System.out.println(t + "\t" + dec.format(result.getSolucionAprox().get(t)) + "\t" + dec.format(result.getSolucionExacta().get(t)) + "\t" + dec.format(result.getErrores().get(t)));
			}
			System.out.println();
			
			metodo = IModelo.EULER_MEJORADO;
			result = m.calcular(ecuacion, x0, t0, tn, n, metodo, solucionExacta);
			
			System.out.println("EULER_MEJORADO");
			System.out.println("tk\txk\txk_ex\terrk");
			dec = new DecimalFormat("###.###");
			for (float t = t0; t <= tn; t += (tn-t0)/n) {
				System.out.println(t + "\t" + dec.format(result.getSolucionAprox().get(t)) + "\t" + dec.format(result.getSolucionExacta().get(t)) + "\t" + dec.format(result.getErrores().get(t)));
			}
			System.out.println();
			
			metodo = IModelo.RUNGE_KUTTA;
			result = m.calcular(ecuacion, x0, t0, tn, n, metodo, solucionExacta);
			
			System.out.println("RUNGE_KUTTA");
			System.out.println("tk\txk\txk_ex\terrk");
			dec = new DecimalFormat("###.#####");
			for (float t = t0; t <= tn; t += (tn-t0)/n) {
				System.out.println(t + "\t" + dec.format(result.getSolucionAprox().get(t)) + "\t" + dec.format(result.getSolucionExacta().get(t)) + "\t" + dec.format(result.getErrores().get(t)));
			}
			System.out.println();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
	}

}
